home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 10
/
FM Towns Free Software Collection 10.iso
/
ms_dos
/
lib
/
happysrc
/
pcinit.c
< prev
next >
Wrap
Text File
|
1994-02-05
|
5KB
|
150 lines
/**************************************
* *
* *** HAPPy Pascal compiler *** *
* initialize routine *
* *
* Copyright (c) H.Asano 1992,1994. *
**************************************/
#define EXTERN extern
#include <signal.h>
#include "pascomp.h"
static void initscalars(void) ;
static void initsets(void) ;
static void entstdtypes(void) ;
extern void entstdnames(void) ;
extern void entundecl (void) ;
extern Set *mkset(Set*,int,...) ;
extern Set *orset(Set*,Set*) ;
extern void initpcd(void) ;
extern void initheap(void);
extern void *Malloc(int) ;
extern void real_err(int,int) ;
/****************************************/
/* init() :初期設定メイン */
/****************************************/
void init(void)
{
signal(SIGFPE,real_err) ; /* 浮動小数点例外処理の登録 */
initheap() ; /* heapメモリの初期設定 */
initscalars() ; /* スカラー項目の初期設定 */
initsets() ; /* symbol set の 初期設定 */
initpcd() ; /* P-codeの初期設定 */
level = 0 ;
top = 0 ;
display[0].fname = nil ;
display[0].flabel = nil ;
display[0].occur = blck ;
entstdtypes() ; /* 標準の型の登録 */
entstdnames() ; /* 標準名の登録 */
entundecl () ; /* 未定義の名前のための事前処理*/
level = 1 ; /* 利用者定義の名前は水準1から*/
top = 1 ;
display[1].fname = nil ;
display[1].flabel = nil ;
display[1].occur = blck ;
}
/****************************************/
/* initscalars() : スカラー項目初期設定 */
/****************************************/
static void initscalars(void)
{
defineinput = false ; /* input ファイル 未定義 */
defineoutput = false ; /* outputファイル 未定義 */
errorcount = 0 ; /* 発見したエラー数初期化 */
lineno = 0 ; /* ソースの行番号初期化 */
ic = 0 ; /* Pコードカウンタ 0に設定 */
lc = outputadr+charmax ; /* 変数カウンタ初期設定 */
ch = ' ' ; /* 読込文字初期化 */
fwptr = nil ; /* 前方参照ポインタをクリア */
}
/****************************************/
/* initsets() : 集合の初期設定 */
/****************************************/
static void initsets(void)
{
mkset(&constbegsys,
addop,intconst,realconst,stringconst,ident,-1) ;
mkset(&simptypebegsys, lparent,-1) ;
orset(&simptypebegsys, &constbegsys) ;
mkset(&typebegsys,
arrow,packedsy,arraysy,recordsy,setsy,filesy,-1) ;
orset(&typebegsys, &simptypebegsys) ;
mkset(&typedels,
arraysy,recordsy,setsy,filesy,-1) ;
mkset(&blockbegsys,
labelsy,constsy,typesy,varsy,procsy,funcsy,beginsy,-1);
mkset(&selectsys,
arrow,period,lbrack,-1) ;
mkset(&facbegsys,
intconst,realconst,stringconst,ident,lparent,lbrack,notsy,nilsy,-1);
mkset(&statbegsys,
beginsy,gotosy,ifsy,whilesy,repeatsy,forsy,withsy,casesy,-1) ;
mkset(&statfolsys,
semicolon,endsy,elsesy,untilsy,-1) ;
}
/****************************************/
/* entstdtypes() : 標準の型登録 */
/****************************************/
static void entstdtypes(void)
{
/**** integer ****/
intptr = (stp*)Malloc(sizeof(stp)) ;
intptr->size = intsize ;
intptr->form = scalar ;
intptr->assignflag = true ;
intptr->sf.sc.scalkind = standard ;
/**** real ****/
realptr = (stp*)Malloc(sizeof(stp)) ;
realptr->size = realsize ;
realptr->form = scalar ;
realptr->assignflag = true ;
realptr->sf.sc.scalkind = standard ;
/**** char ****/
charptr = (stp*)Malloc(sizeof(stp)) ;
charptr->size = charsize ;
charptr->form = scalar ;
charptr->assignflag = true ;
charptr->sf.sc.scalkind = standard ;
/**** boolean ****/
boolptr = (stp*)Malloc(sizeof(stp)) ;
boolptr->size = boolsize ;
boolptr->form = scalar ;
boolptr->assignflag = true ;
boolptr->sf.sc.scalkind = declared ; /* 列挙型はdeclaredである */
/**** nil ****/
nilptr = (stp*)Malloc(sizeof(stp)) ;
nilptr->size = ptrsize ;
nilptr->form = pointer ;
nilptr->assignflag = true ;
nilptr->sf.pt.eltype = nil ;
/**** for alignment of parameters ****/
parmptr = (stp*)Malloc(sizeof(stp)) ;
parmptr->size = parmsize ;
parmptr->form = scalar ;
parmptr->assignflag = true ;
parmptr->sf.sc.scalkind = standard ;
/**** text ****/
textptr = (stp*)Malloc(sizeof(stp)) ;
textptr->size = charsize ;
textptr->form = files ;
textptr->assignflag = false ;
textptr->sf.fi.texttype = true ;
textptr->sf.fi.filtype = charptr ;
}